// 外观模式，为一组复杂的的子系统提供更高级统一的接口，通过这个接口，使得对子系统接口的访问更容易。

// issue

document.onclick = function (e) {
    e.preventDefault();
    if (e.target !== document.getElementById('myInput')) {
        hidePageAlert();
    }
}

function hidePageAlert() {

}

//以下定义会覆盖docunment.onclick

document.onclick = function () {
    // 覆盖了之前的DOM0 级别的click 事件
}


// 兼容模式


function addEvent(dom, type, fn) {
    // 对于支持DOM2 级别addEvnetListener方法的浏览器
    if (dom.addEventListener) {
        dom.addEventListener(type, fn, false);
    } else if (dom.attachEvent) {
        dom.attachEvent('on' + type, fn);
    } else {
        dom['on' + type] = fn;
    }
}


var myInput = document.getElementById('myInput');
addEvent(myInput, 'click', function () {
    console.log("绑定第1个事件")
})
addEvent(myInput, 'click', function () {
    console.log("绑定第2个事件")
})
addEvent(myInput, 'click', function () {
    console.log("绑定第3个事件")
})


// 获取对象事件
var getEvent = function (event) {
    return event || window.event
}

//获取元素
var getTarget = function (event) {
    var event = getEvent(event);
    return event.target || event.srcElement
}

// 阻止默认行为

var preventDefault = function (evnet) {
    var event = getEvent(event);
    if (event.preventDefault) {
        event.preventDefault();
    } else {
        event.returnValue = false;
    }
}

document.onclick = function (e) {
    preventDefault(e);
    if (getTarget(e) !== document.getElementById('myInput')) {
        hideInputSug();
    }
}